定期ミートアップ 第73回
苦労したところ
Asyncnessとvirtual functionの関係
Shiikaのメソッドはsyncとasyncに自動判定される。asyncの方は継続(終わったあと呼び出すべき関数)を追加引数にとる
「現状の実装がsyncでも、継承によってasyncなものにoverrideされる可能性がある」
→overrideされうるメソッドはasyncとしてコンパイルしなければならない
cf. overrideされないと分かっているメソッドは、syncとしてコンパイルできるなら、したほうがよい(実行性能上)
→各メソッドに.is_virtualというフラグを追加
1. クラスが「base class X ... end」で宣言されている場合、すべてのメソッドがis_virtual=true
2. そうでない場合、親をオーバーライドしているメソッド(=同名のメソッドが親にある)はis_virtual=true、それ以外はfalse
virtualなメソッドを呼び出すときはvtableを使う
virtualなメソッドは強制的にasyncなシグネチャにする
現在の作業:Module の実装 (function call via witness table)
余談:AIについて
ChatGPT
できること:
プログラミング関係の質問に答える
.NETの膨大なAPIを全部知ってるので便利
ないメソッドを答えてきたりするが…
課金はしていない
Github Copilot
できること:
OSSのソースを読ませて解説してもらう(Copilot chat)
コード補完 (on vim)
しばらく課金していた。現在は無料プランで足りている
Claude code
できること:
claudeコマンドでCLIの対話ツールを起動
「◯◯を実装して」というとソースを読んで実装してくれる
ファイル読む、ファイル書く、コマンド実行、などは都度OKか聞かれる
「このバグの原因を考えて」もいける
課金2ヶ月目
Proプラン($20/月)
~/を全削除された事例
fork bombで固められた事例
対策
とりあえずgitは必須
なんでもallowすると危険
コンテナを使うのがよい